From f275a935a26169a69969b04ba268885ca028c54b Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Wed, 5 Aug 2009 12:04:39 +0100 Subject: [PATCH] xend: fix memory leak resulting in long garbage collector runs In the method xen.xend.XendStateStore.XendStateStore.load_state and xen.xend.XendStateStore.XendStateStore.save_state the minidom objects used to load/save the current state of a device type, can't be freed by the python garbage collector after all references to the top node are cleared, because of cyclic references between the DOM nodes. So memory usage of xend increases after calling these methods. To solve this problem, the unlink() method must be called for a minidom object before the last reference to the top node is cleared (see python docs). This breaks the cyclic references, so the garbage collector can free these objects. Signed-off-by: juergen.gross@ts.fujitsu.com --- tools/python/xen/xend/XendStateStore.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/python/xen/xend/XendStateStore.py b/tools/python/xen/xend/XendStateStore.py index 245463fd4d..74767260f8 100644 --- a/tools/python/xen/xend/XendStateStore.py +++ b/tools/python/xen/xend/XendStateStore.py @@ -147,6 +147,7 @@ class XendStateStore: cls_dict[val_name] = bool(int(val_text)) state[uuid] = cls_dict + dom.unlink() return state def save_state(self, cls, state): @@ -226,5 +227,5 @@ class XendStateStore: node.appendChild(val_node) open(xml_path, 'w').write(doc.toprettyxml()) - + doc.unlink() -- 2.30.2